package com.stefanini.pe.bbva.bp.in.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import javax.faces.event.ComponentSystemEvent;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import com.stefanini.pe.bbva.bp.in.bo.iface.CuestionarioBOIface;
import com.stefanini.pe.bbva.bp.in.model.AdministrarCuestionarioModel;
import com.stefanini.pe.bbva.bp.in.model.LoginModel;
import com.stefanini.pe.bbva.bp.in.security.AuthorizationService;
import com.stefanini.pe.bbva.bp.in.to.UsuarioSesion;
import com.stefanini.pe.bbva.bp.in.utils.SpringApplicationContext;
import com.stefanini.pe.bbva.bp.in.utils.Util;

@Controller(value="administrarAlternativa")
@RequestScoped
public class AdministrarAlternativaController extends GenericoController{
	
	private static Logger logger = Logger.getLogger(AdministrarAlternativaController.class);
	
	@Autowired
	private CuestionarioBOIface cuestionarioBOIface;
	@Autowired
	private AdministrarCuestionarioModel administrarCuestionarioModel;
	@Autowired
	private AdministrarCuestionario administrarCuestionario;

	private LoginModel loginModel;
	
	private String usuarioModificacion;
	private String fechaModificacion;
	private String alternativa;
	private String descAdicional;
	private String peso;
	private String idEscenario;
	private String valorEscenario;
	private String usuarioModificacionAlternativa;
	private String fechaModificacionAlternativa;
	private String idAlternativa;
	private boolean mostrarModificacion;
	private String idItemEliminar;
	
	public void onPageLoad(ComponentSystemEvent event) {
		try{
			AuthorizationService auth = (AuthorizationService)SpringApplicationContext.getBean("authorizationService");
			if (auth.isSessionUserAndContextValide() && !FacesContext.getCurrentInstance().isPostback()) {
				System.out.println("AdministrarAlternativaController... is not Postback");
				
				valorEscenario = "";
				LoginController loginContr = (LoginController)getHttpSession().getAttribute("loginController");
				loginModel = loginContr.getLoginModel();
				consultarAlternativas();
			}
		}catch(Exception e){
			e.printStackTrace();
			logger.error(e.getMessage(), e);
			mostrarError("Error interno. "+Util.obtenerMensajeError(e));
		}
	}
	
	public void consultarAlternativas(){
		try{
			FacesContext ctx = FacesContext.getCurrentInstance();
			this.getAdministrarCuestionarioModel().setListaAlternativas(new ArrayList());
			this.getAdministrarCuestionarioModel().setListaAlternativas(cuestionarioBOIface.consultaCuestionarioAlternativa(administrarCuestionarioModel.getIdPregunta()));
			((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioAlternativa", this.getAdministrarCuestionarioModel().getListaAlternativas());
			Map parametros = administrarCuestionario.getParametrosReporte();
			parametros.put("p_pregunta", this.getAdministrarCuestionarioModel().getDespregunta());
			parametros.put("p_orden", this.getAdministrarCuestionarioModel().getOrdenPregunta());
			parametros.put("p_tiporespuesta", this.getAdministrarCuestionarioModel().getTipoPregunta());
			parametros.put("p_escenarios", this.getAdministrarCuestionarioModel().getEscenarios());
			((HttpSession)ctx.getExternalContext().getSession(true)).setAttribute("listaCuestionarioAlternativa_param", parametros);
		}catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(), e);
		}
	}
	
	public void accionSubir(Object ob){
		try{
			HashMap row = (HashMap)ob;
			HashMap map=new HashMap();
			map.put("in_idpregunta",administrarCuestionarioModel.getIdPregunta());
			map.put("in_idalternativa", row.get("IDALTERNATIVA"));
			map.put("in_accionsubir", "S");
			cuestionarioBOIface.ordenarCuestionarioAlternativa(map);
			consultarAlternativas();
		}catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(), e);
		}
	}
	
	public void accionBajar(Object ob){
		try{
			HashMap row = (HashMap)ob;
			HashMap map=new HashMap();
			map.put("in_idpregunta",administrarCuestionarioModel.getIdPregunta());
			map.put("in_idalternativa", row.get("IDALTERNATIVA"));
			map.put("in_accionsubir", "N");
			cuestionarioBOIface.ordenarCuestionarioAlternativa(map);
			consultarAlternativas();
		}catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(), e);
		}
	}
	
	public void eliminarPregunta(Object ob){
		HashMap map = (HashMap)ob;
		this.setIdItemEliminar((String)map.get("IDALTERNATIVA"));
	}
	
	public void eliminar(){
		try{
			cuestionarioBOIface.eliminarCuestionarioAlternativa(administrarCuestionarioModel.getIdPregunta(),this.getIdItemEliminar());
			consultarAlternativas();
		}catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(),e);
		}
	}
	
	public void nuevaAlternativa(){
		this.setMostrarModificacion(false);
		this.getAdministrarCuestionarioModel().setListaAlternativasEscenario(new ArrayList());
		this.setIdAlternativa("");
		this.setFechaModificacionAlternativa("");
		this.setUsuarioModificacionAlternativa("");
		this.setAlternativa("");
		this.setDescAdicional("");
		this.setPeso("");
		if(this.getAdministrarCuestionarioModel().getIdTipoRespuesta().equals("3")){
			this.getAdministrarCuestionarioModel().setMostrarEscenarios(true);
		} else{
			this.getAdministrarCuestionarioModel().setMostrarEscenarios(false);
		}
	}
	
	public void cargarEdicionAlternativa(Object ob){
		try{
			this.setMostrarModificacion(true);
			this.getAdministrarCuestionarioModel().setListaAlternativasEscenario(new ArrayList());
			HashMap map = (HashMap)ob;
			this.setFechaModificacionAlternativa(map.get("FECHAMODIFICACION")==null?"":Util.formatoFecha((String)map.get("FECHAMODIFICACION")));
			this.setUsuarioModificacionAlternativa((String)map.get("CODREGISTROMODIFICACION"));
			this.setAlternativa((String)map.get("DESCRIPCIONALTERNATIVA"));
			this.setDescAdicional((String)map.get("DESCRIPCIONADICIONAL"));
			this.setPeso((String)map.get("PESO"));
			HashMap escenario = new HashMap();
			escenario.put("in_idpregunta", administrarCuestionarioModel.getIdPregunta());
			escenario.put("in_idalternativa", (String)map.get("IDALTERNATIVA"));
			this.setIdAlternativa((String)map.get("IDALTERNATIVA"));
			if(this.getAdministrarCuestionarioModel().getIdTipoRespuesta().equals("3")){
				this.getAdministrarCuestionarioModel().setMostrarEscenarios(true);
				this.getAdministrarCuestionarioModel().setListaAlternativasEscenario(cuestionarioBOIface.seleccionarEscenariosAlternativa(escenario));
			} else{
				this.getAdministrarCuestionarioModel().setMostrarEscenarios(false);
			}
		}catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(), e);
		}
	}
	
	public void agregarEscenario(){
		String descrip=null;
		if(this.getIdEscenario().toString().equals("3")) {
			descrip="DESFAVORABLE";
		}
		if(this.getIdEscenario().toString().equals("2")) {
			descrip="NEUTRAL";
		}
		if(this.getIdEscenario().toString().equals("1")) {
			descrip="FAVORABLE";
		}
		
		HashMap map = new HashMap();
		map.put("IDESCENARIOS", this.getIdEscenario());
		map.put("DESCRIPCION",descrip); 
		map.put("VALOR", this.getValorEscenario());
		this.getAdministrarCuestionarioModel().getListaAlternativasEscenario().add(map);
		this.setValorEscenario("");
		this.setIdEscenario("");
	}
	
	public void guardarAlternativa(){
		try{
			HashMap map=new HashMap();
			map.put("in_idpregunta", administrarCuestionarioModel.getIdPregunta());
			map.put("in_descripcionalternativa", this.getAlternativa());
			map.put("in_descripcionadicional", this.getDescAdicional());
			map.put("in_peso", this.getPeso()==null?"":this.getPeso());
			StringBuilder strIdEscenario=new StringBuilder("");
			StringBuilder strValorEscenario=new StringBuilder("");
			for (Iterator iter = this.getAdministrarCuestionarioModel().getListaAlternativasEscenario().iterator(); iter.hasNext();) {
				HashMap element = (HashMap) iter.next();
				strIdEscenario.append(element.get("IDESCENARIOS")).append(",");
				strValorEscenario.append(element.get("VALOR")).append(",");
			}		
			if(this.getAdministrarCuestionarioModel().getListaAlternativasEscenario().size()>0){
				map.put("in_idescenario", Util.depuraComa(strIdEscenario));
				map.put("in_valor", Util.depuraComa(strValorEscenario));
			}else{
				map.put("in_idescenario","");
				map.put("in_valor","");
			}
			UsuarioSesion usu=loginModel.getUsuarioSesion();
			if(this.getIdAlternativa().equals("")){
				map.put("in_codregistrocreacion", usu.getCodigoUsuario());
				map.put("in_terminalcreacion", Util.getTerminal());
				cuestionarioBOIface.grabarCuestionarioAlternativa(map);
			}else{
				map.put("in_idalternativa", this.getIdAlternativa());
				map.put("in_codregistromodificacion", usu.getCodigoUsuario());
				map.put("in_terminalmodificacion", Util.getTerminal());
				cuestionarioBOIface.actualizarCuestionarioAlternativa(map);
			}
			consultarAlternativas();
		}catch (Exception e) {
			e.printStackTrace();
			logger.error(e.getMessage(), e);
		}
	}
	
	public void eliminarEscenario(Object ob){
		Map map = (Map)ob;
		this.getAdministrarCuestionarioModel().getListaAlternativasEscenario().remove(map);
	}

	public AdministrarCuestionarioModel getAdministrarCuestionarioModel() {
		return administrarCuestionarioModel;
	}

	public void setAdministrarCuestionarioModel(
			AdministrarCuestionarioModel administrarCuestionarioModel) {
		this.administrarCuestionarioModel = administrarCuestionarioModel;
	}
	
	public String getFechaModificacion() {
		return fechaModificacion;
	}

	public void setFechaModificacion(String fechaModificacion) {
		this.fechaModificacion = fechaModificacion;
	}

	public String getUsuarioModificacion() {
		return usuarioModificacion;
	}

	public void setUsuarioModificacion(String usuarioModificacion) {
		this.usuarioModificacion = usuarioModificacion;
	}

	public String getAlternativa() {
		return alternativa;
	}

	public void setAlternativa(String alternativa) {
		this.alternativa = alternativa;
	}

	public String getDescAdicional() {
		return descAdicional;
	}

	public void setDescAdicional(String descAdicional) {
		this.descAdicional = descAdicional;
	}

	public String getPeso() {
		return peso;
	}

	public void setPeso(String peso) {
		this.peso = peso;
	}
	
	public String getIdEscenario() {
		return idEscenario;
	}

	public void setIdEscenario(String idEscenario) {
		this.idEscenario = idEscenario;
	}

	public String getValorEscenario() {
		return valorEscenario;
	}

	public void setValorEscenario(String valorEscenario) {
		this.valorEscenario = valorEscenario;
	}

	public String getFechaModificacionAlternativa() {
		return fechaModificacionAlternativa;
	}

	public void setFechaModificacionAlternativa(String fechaModificacionAlternativa) {
		this.fechaModificacionAlternativa = fechaModificacionAlternativa;
	}

	public String getUsuarioModificacionAlternativa() {
		return usuarioModificacionAlternativa;
	}

	public void setUsuarioModificacionAlternativa(
			String usuarioModificacionAlternativa) {
		this.usuarioModificacionAlternativa = usuarioModificacionAlternativa;
	}

	public String getIdAlternativa() {
		return idAlternativa;
	}

	public void setIdAlternativa(String idAlternativa) {
		this.idAlternativa = idAlternativa;
	}

	public boolean isMostrarModificacion() {
		return mostrarModificacion;
	}

	public void setMostrarModificacion(boolean mostrarModificacion) {
		this.mostrarModificacion = mostrarModificacion;
	}

	public String getIdItemEliminar() {
		return idItemEliminar;
	}

	public void setIdItemEliminar(String idItemEliminar) {
		this.idItemEliminar = idItemEliminar;
	}	
}